home *** CD-ROM | disk | FTP | other *** search
/ SunSoft Catalyst CDWARE 1996 May to August / Catalyst CDWARE 1996 May to August.iso / .products / JavaWorld / javaworld / cgi-bin / jw-adsales.cgi < prev    next >
Text File  |  1996-02-27  |  8KB  |  252 lines

  1. #!/usr/local/bin/perl
  2. # jw-adsales.cgi - script to process e-mail sent from JavaWorld.
  3. # this is a kludge until the html mailto becomes ubiquitous.
  4. #
  5. # usage: jw-adsales.cgi <recipient> [ <return href> <return tag> | send ]
  6. #
  7. # if 'send' is the last command-line argument, jw-adsales.cgi assumes
  8. # that it is to send the enclosed datastream to the recipient denoted by
  9. # the first command-line argument. otherwise, it interprets the second
  10. # and third command-line arguments as a return href and tag for 'back-to'
  11. # functionality.
  12. #
  13. # it's fairly crucial that the e-mail address does not contain +
  14. # signs, as this will confuse jw-adsales.cgi's interpretation of
  15. # command-line arguments.
  16. #
  17. # complain to david.burnette@javaworld.com if there are problems.
  18.  
  19.  
  20. if ("$ARGV[$#ARGV]" eq "send") { # send e-mail message
  21.  
  22.    $defaultfrom="javaworld\@javaworld.com";
  23.    $defaultname="JavaWorld";
  24.    $mailprog="/usr/lib/sendmail";
  25.    $bcc="jwbcc\@javaworld.com"; # recipient of failsafe copy
  26.    $bccname="JW bcc";
  27.    $bccsubject="bccmail to $ARGV[0]\@$ARGV[1]";
  28.    $date=`date`; chop($date);
  29.  
  30.    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  31.  
  32.    if (@ARGV < 3) {
  33.       $recipient="david.burnette\@javaworld.com";
  34.       $href1="/index.html";
  35.       $src1="/icons/b-thismonth.gif";
  36.       $alt1="[This month's table of contents]";
  37.    }
  38.    elsif (@ARGV == 3) {
  39.       $recipient="$ARGV[0]\@$ARGV[1]";
  40.       $href1="/index.html";
  41.       $src1="/icons/b-thismonth.gif";
  42.       $alt1="[This month's table of contents]";
  43.    }
  44.    elsif (@ARGV == 4) {
  45.       $recipient="$ARGV[0]\@$ARGV[1]";
  46.       $href1="$ARGV[2]";
  47.       $src1="/icons/b-thismonth.gif";
  48.       $alt1="[This month's table of contents]";
  49.    }
  50.    else {
  51.       $recipient="$ARGV[0]\@$ARGV[1]";
  52.       $href1="/index.html";
  53.       $src1="/icons/b-thismonth.gif";
  54.       $alt1="[This month's table of contents]";
  55.       $href2="$ARGV[2]#$ARGV[3]";
  56.       $src2="/icons/b-backtostory.gif";
  57.       $alt2="[Back to story]";
  58.    }
  59.  
  60.    $HREF1="<A HREF=\"$href1\"><IMG SRC=\"$src1\" ALT=\"$alt1\"></A>";
  61.    $HREF2="<A HREF=\"$href2\"><IMG SRC=\"$src2\" ALT=\"$alt2\"></A>" if defined($href2);
  62.  
  63.  
  64.    # Split the name-value pairs
  65.    @pairs = split(/&/,$buffer);
  66.  
  67.    foreach $pair (@pairs)
  68.    {
  69.       ($name,$value) = split(/=/,$pair);
  70.       $value =~ tr/+/ /;
  71.       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  72.  
  73.       # Stop people from using subshells to execute commands
  74.       $value =~ s/~!/ ~!/g; 
  75.  
  76.       $FORM{$name} = $value;
  77.    }
  78.  
  79.  
  80.    # check for empty message; thwart bastards
  81.  
  82.    if ($FORM{'name'} =~ /^[\s]*$/
  83.    || $FORM{'title'} =~ /^[\s]*$/
  84.    || $FORM{'company'} =~ /^[\s]*$/
  85.    || $FORM{'address'} =~ /^[\s]*$/
  86.    || ($FORM{'phone'} =~ /^[\s]*$/ && $FORM{'email'} =~ /^[\s]*$/)
  87.    || $FORM{'message'} =~ /^[\s]*$/) {
  88.       print <<END_OF_FORM;
  89. Content-TYPE: text/html
  90.  
  91. <HTML>
  92. <HEAD><TITLE>JavaWorld-Adsales E-mail Form</TITLE></HEAD>
  93. <BODY>
  94. <H3>
  95. An empty message cannot be sent. It must contain a name, title,
  96. company, phone, e-mail or postal address, and a message. 
  97. <P>
  98. To send a message, return to the mail form by hitting your browser\'s 
  99. back button. 
  100. </H3>
  101. </BODY>
  102. </HTML>
  103. END_OF_FORM
  104.    }
  105.    else {  # send thank-you note to browser
  106.  
  107.       print "Content-TYPE: text/html\n\n";
  108.       print "<HTML>\n";
  109.       print "<HEAD><TITLE>JavaWorld</TITLE></HEAD>\n";
  110.       print "<BODY>\n";
  111.       print "$HREF1$HREF2\n";
  112.       print "<H3>Thank you for sending mail to $recipient. We appreciate your patronage.</H3>\n";
  113.       print "</BODY>\n";
  114.       print "</HTML>\n";
  115.  
  116.  
  117.       # send failsafe copy of raw data to bcc
  118.  
  119.       open (MAIL, "|$mailprog $bcc") || die "Can't open $mailprog!\n";
  120.       print MAIL "From: $bcc ($bccname)\n";
  121.       print MAIL "To: $bcc\n";
  122.       print MAIL "Subject: $bccsubject\n\n";
  123.       print MAIL "BEGIN RECORD $date\n";
  124.       print MAIL "recipient=$recipient\n";
  125.       print MAIL "href1=$href1\n";
  126.       print MAIL "src1=$src1\n";
  127.       print MAIL "alt1=$alt1\n";
  128.       print MAIL "href2=$href2\n";
  129.       print MAIL "src2=$src2\n";
  130.       print MAIL "alt2=$alt2\n";
  131.       print MAIL "CONTENT_LENGTH=$ENV{'CONTENT_LENGTH'}\n";
  132.       print MAIL "CONTENT_TYPE=$ENV{'CONTENT_TYPE'}\n";
  133.       print MAIL "DOCUMENT_ROOT=$ENV{'DOCUMENT_ROOT'}\n";
  134.       print MAIL "GATEWAY_INTERFACE=$ENV{'GATEWAY_INTERFACE'}\n";
  135.       print MAIL "HTTP_REFERER=$ENV{'HTTP_REFERER'}\n";
  136.       print MAIL "HTTP_USER_AGENT=$ENV{'HTTP_USER_AGENT'}\n";
  137.       print MAIL "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
  138.       print MAIL "REMOTE_ADDR=$ENV{'REMOTE_ADDR'}\n";
  139.       print MAIL "REMOTE_HOST=$ENV{'REMOTE_HOST'}\n";
  140.       print MAIL "REQUEST_METHOD=$ENV{'REQUEST_METHOD'}\n";
  141.       print MAIL "SCRIPT_NAME=$ENV{'SCRIPT_NAME'}\n";
  142.       print MAIL "SERVER_NAME=$ENV{'SERVER_NAME'}\n";
  143.       print MAIL "SERVER_PORT=$ENV{'SERVER_PORT'}\n";
  144.       print MAIL "SERVER_PROTOCOL=$ENV{'SERVER_PROTOCOL'}\n";
  145.       print MAIL "SERVER_SOFTWARE=$ENV{'SERVER_SOFTWARE'}\n";
  146.       print MAIL "ARGV=@ARGV\n";
  147.       print MAIL "STDINDATA=$buffer\n";
  148.       print MAIL "END RECORD $date\n";
  149.       close(MAIL);
  150.  
  151.  
  152.       # send mail to $recipient
  153.  
  154.       open (MAIL, "|$mailprog $recipient") || die "Can't open $mailprog!\n";
  155.       print MAIL "From: $FORM{'email'} ($FORM{'name'})\n";
  156.       print MAIL "To: $recipient\n";
  157.       print MAIL "Subject: $FORM{'subject'}\n\n";
  158.       print MAIL "$FORM{'message'}\n";
  159.       print MAIL "\n------------------------------------------------------------\n\n";
  160.       print MAIL "Name: $FORM{'name'}\n";
  161.       print MAIL "Title: $FORM{'title'}\n";
  162.       print MAIL "Company: $FORM{'company'}\n";
  163.          @f = split(/\n/,$FORM{'address'});
  164.       print MAIL "Address: $f[0]\n";
  165.       shift(@f);
  166.       foreach $f (@f) {
  167.          print MAIL "         $f[$f]\n";
  168.       }
  169.       print MAIL "Phone: $FORM{'phone'}\n";
  170.       print MAIL "E-mail: $FORM{'email'}\n\n";
  171.       print MAIL "E-mail from JavaWorld (http://www.javaworld.com)\n";
  172.       print MAIL "Agent: $ENV{'HTTP_USER_AGENT'}\n";
  173.       print MAIL "Remote host: $ENV{'REMOTE_HOST'}\n";
  174.       print MAIL "Remote IP address: $ENV{'REMOTE_ADDR'}\n";
  175.       print MAIL "HTTP_REFERER=$ENV{'HTTP_REFERER'}\n";
  176.       close(MAIL);
  177.  
  178.    } # end of if bastard else sendmail
  179.  
  180.    exit 0;
  181. }
  182. else {  # present message form to browser
  183.  
  184.    if (@ARGV < 2) {
  185.       $recipient="webmaster\@javaworld.com";
  186.       $href="/index.html";
  187.    }
  188.    elsif (@ARGV == 2) {
  189.       $recipient="$ARGV[0]\@$ARGV[1]";
  190.       $href="/index.html";
  191.    }
  192.    elsif (@ARGV == 3) {
  193.       $recipient="$ARGV[0]\@$ARGV[1]";
  194.       $href="$ARGV[2]";
  195.    }
  196.    else {
  197.       $recipient="$ARGV[0]\@$ARGV[1]";
  198.       $href="$ARGV[2]+$ARGV[3]";
  199.    }
  200.  
  201.    $banner="Send mail to $recipient";
  202.  
  203.    print <<END_OF_FORM;
  204. Content-TYPE: text/html
  205.  
  206. <HTML>
  207. <HEAD><TITLE>JavaWorld E-mail Form</TITLE></HEAD>
  208. <BODY>
  209. <FORM METHOD=POST ACTION="http://www.javaworld.com/cgi-bin/jw-adsales.cgi?$ARGV[0]+$ARGV[1]+$href+send">
  210. <P>
  211. <BLOCKQUOTE>
  212. <H2>For advertising information on <EM>JavaWorld</EM> call
  213. or e-mail (using the form below) Colette McMullen, Associate Publisher,
  214. colette.mcmullen\@javaworld.com, 415-267-4527.</H2>
  215. </BLOCKQUOTE>
  216.  
  217. <P>
  218. <STRONG>Your Name:</STRONG>
  219. <INPUT TYPE="text" NAME="name" SIZE ="50">
  220. <P>
  221. <STRONG>Your Title:</STRONG>
  222. <INPUT TYPE="text" NAME="title" SIZE ="50">
  223. <P>
  224. <STRONG>Your Company:</STRONG>
  225. <INPUT TYPE="text" NAME="company" SIZE ="50">
  226. <P>
  227. <STRONG>Your Postal Address:</STRONG><BR>
  228. <TEXTAREA COLS=50 ROWS=5 NAME="address"></TEXTAREA>
  229. <P>
  230. <STRONG>Your Phone:</STRONG>
  231. <INPUT TYPE="text" NAME="phone" SIZE ="50">
  232. <P>
  233. <STRONG>Your e-mail address:</STRONG>
  234. <INPUT TYPE="text" NAME="email" SIZE ="50">
  235. <P>
  236. <STRONG>Subject:</STRONG>
  237. <INPUT TYPE="text" NAME="subject" SIZE ="50">
  238. <P>
  239. <STRONG>Please enter your message below:</STRONG><BR>
  240. <TEXTAREA COLS=70 ROWS=10 NAME="message"></TEXTAREA>
  241. <BR>
  242. <INPUT TYPE="submit" VALUE="Send message">
  243. <INPUT TYPE="reset" VALUE="Clear form"</P>
  244. </FORM>
  245. </BODY>
  246. </HTML>
  247. END_OF_FORM
  248.  
  249.    exit 0;
  250. }
  251.  
  252.